#!/usr/bin/env python3
"""
通用日志记录器命令行接口

提供三个主要功能:
1. 测试日志记录功能
2. 切换预设配置(开发/生产环境)
3. 自定义日志目录

使用示例:
  # 测试日志功能
  python -m generic_logger test --level INFO --message "测试消息"

  # 切换为开发环境配置
  python -m generic_logger preset dev

  # 使用自定义日志目录
  python -m generic_logger test --base-dir custom_logs --message "自定义目录测试"
"""

import argparse
import logging
from . import get_logger, LoggerManager, setup_logger

def main():
    """
    MySQL备份日志记录器主入口函数

    功能:
    1. 解析命令行参数
    2. 根据命令执行相应操作
    3. 返回执行结果

    支持的子命令:
    - test: 测试日志记录功能
    - preset: 切换预设配置

    返回值:
    None
    """
    parser = argparse.ArgumentParser(description='MySQL Backup Logger CLI')
    subparsers = parser.add_subparsers(dest='command', required=True)

    # Test命令: 测试日志记录功能
    test_parser = subparsers.add_parser('test', help='测试日志记录功能')
    test_parser.add_argument('--name', default='test',
                           help='日志记录器名称(默认: test)')
    test_parser.add_argument('--level', default='INFO',
                           choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
                           help='日志级别(默认: INFO)')
    test_parser.add_argument('--message', default='Test message',
                           help='要记录的日志消息(默认: Test message)')
    test_parser.add_argument('--base-dir', default='logs',
                           help='日志文件存储的基本目录(默认: logs)')
    test_parser.add_argument('--async', action='store_true',
                           help='使用异步日志记录')
    test_parser.add_argument('--buffer-size', type=int, default=0,
                           help='异步日志的内存缓冲区大小(默认: 0)')

    # Preset命令: 管理预设配置
    preset_parser = subparsers.add_parser('preset', help='管理预设配置')
    preset_parser.add_argument('name', choices=['dev', 'dev_file', 'prod'],
                             help='预设配置名称(dev:仅控制台, dev_file:控制台+文件, prod:生产环境)')

    args = parser.parse_args()

    if args.command == 'test':
        # 测试日志功能
        logger = get_logger(
            args.name,
            level=getattr(logging, args.level),
            base_dir=args.base_dir,
            use_async=getattr(args, 'async', False),
            buffer_size=args.buffer_size
        )
        getattr(logger, args.level.lower())(args.message)
        print(f"已记录{args.level}级别的日志消息: {args.message}")
        print(f"日志文件位置: {args.base_dir}/{args.name}.log")

    elif args.command == 'preset':
        # 切换预设配置
        manager = LoggerManager()
        manager.use_preset(args.name)
        print(f"已切换到{args.name}预设配置")

        # 如果是dev_file配置，执行测试日志
        if args.name == 'dev_file':
            logger = get_logger('dev_file_test', level=logging.DEBUG)
            logger.debug('DEBUG级别测试消息 - 应出现在控制台和文件')
            logger.info('INFO级别测试消息 - 应出现在控制台和文件')
            logger.warning('WARNING级别测试消息 - 应出现在控制台和文件')
            print("已生成测试日志，请检查控制台输出和日志文件")

if __name__ == '__main__':
    main()